package com.pochoF1.daos;

import java.util.Calendar;

import org.hibernate.Query;

import com.pochoF1.entities.SesionEntidad;
import com.pochoF1.enums.Carreras;
import com.pochoF1.enums.Sesiones;

public class SesionDAO extends GenericDAO<SesionEntidad> {

	private static SesionDAO instance = null;

	protected SesionDAO() {
	}

	public static SesionDAO getInstance() {
		if (instance == null) {
			instance = new SesionDAO();
		}
		return instance;
	}
	
	public SesionEntidad getByCarreraSesion(Carreras carrera,Sesiones sesion){
		Query query = getHibernateTemplate().createQuery("from " + SesionEntidad.class.getName() + " s where  UPPER(s.carrera.carrera) = UPPER(:carrera) and UPPER(s.tipoSesion.tipoSesion) = UPPER(:sesion) and s.year = :anio");
		query.setParameter("carrera", carrera.name());
		query.setParameter("sesion", sesion.name());
		query.setParameter("anio", Calendar.getInstance().get(Calendar.YEAR));
		SesionEntidad resultado = (SesionEntidad)query.uniqueResult();
		getSession().getTransaction().commit();
		return resultado ;
		
	}

	public void guardar(SesionEntidad sesionEntidad) throws Exception {
		if(sesionEntidad.getCarrera().getCarrera()!=null && CarreraDAO.getInstance().get(sesionEntidad.getCarrera().getCarrera())==null){
			CarreraDAO.getInstance().saveCarrera(sesionEntidad.getCarrera());
		}
		if(sesionEntidad.getTipoSesion().getTipoSesion()!=null && TipoSesionDAO.getInstance().get(sesionEntidad.getTipoSesion().getTipoSesion())==null){
			TipoSesionDAO.getInstance().saveTipoSesion(sesionEntidad.getTipoSesion());
		}
		if(SesionDAO.getInstance().get(sesionEntidad.getIdSesion())==null){
			SesionDAO.getInstance().save(sesionEntidad);
		}
	}

}
